package mb.admin.webbean;

import java.util.ArrayList;

import javax.faces.model.SelectItem;

import mb.admin.dao.OrderDAO;
import mb.admin.data.OrderData;
import mb.commons.CalendarManager;

/**
 * Klasa obsługująca widok 'zamówienia'
 * @author Michał Budziło
 *
 */
/**
 * @author Michał Budziło
 * 
 */
public class OrderManager {

	private OrderDAO dao;
	private ArrayList<OrderData> dataList;
	private OrderData editedData;
	private OrderData newData;
	private CalendarManager calendar;
	private ArrayList<SelectItem> idPaczkiList;
	private ArrayList<SelectItem> idKurieraList;
	private ArrayList<SelectItem> statusList;
	private ArrayList<SelectItem> pozycjaList;

	/**
	 * Konstruktor
	 */
	public OrderManager() {
		dao = new OrderDAO();
		calendar = new CalendarManager();
		idKurieraList = new ArrayList<SelectItem>();
		idPaczkiList = new ArrayList<SelectItem>();
		statusList = new ArrayList<SelectItem>();
		pozycjaList = new ArrayList<SelectItem>();
		dataList = dao.getOrderList();

	}

	/**
	 * Metoda przygotowuje dane przez dodaniem zamówienia
	 */
	public void prepareAddData() {
		calendar.equals("");
		newData = new OrderData();
		idKurieraList = dao.getIdKuriera();
		idPaczkiList = dao.getIdPaczkiList();
		pozycjaList = dao.getPozycjaList();
		statusList = createStatusList();
		if (idKurieraList == null) {
			idKurieraList = new ArrayList<SelectItem>();
		}

		if (idPaczkiList == null) {
			idPaczkiList = new ArrayList<SelectItem>();
		}

	}

	/**
	 * Metoda dodaje do bazy danych nowe zamówienie
	 */
	public void addData() {
		dao.insertData(newData);
		refreshData();
	}

	/**
	 * Metoda przygotowuje dane przed edycją zamówienia
	 */
	public void prepareEditData() {
		idKurieraList = dao.getEditIdKuriera(editedData.getIdKuriera());
		idPaczkiList = dao.getEditIdPaczkiList(editedData.getIdPaczki());
		pozycjaList = dao.getPozycjaList();
		statusList = createStatusList();

		if (idKurieraList == null) {
			idKurieraList = new ArrayList<SelectItem>();
		}

		if (idPaczkiList == null) {
			idPaczkiList = new ArrayList<SelectItem>();
		}

	}

	/**
	 * Metoda tworzy listę statusów
	 * 
	 * @return lista statusów
	 */
	private ArrayList<SelectItem> createStatusList() {
		ArrayList<SelectItem> lista = new ArrayList<SelectItem>();

		lista.add(new SelectItem("przyjeto", "przyjeto"));
		lista.add(new SelectItem("dostarczono", "dostarczono"));
		lista.add(new SelectItem("zgubiono", "zgubiono"));
		lista.add(new SelectItem("niedostarczono", "niedostarczono"));
		lista.add(new SelectItem("oczekiwanie na dostarczenie","oczekiwanie na dostarczenie"));
		lista.add(new SelectItem("dowoz do klienta","dowoz do klienta"));
		lista.add(new SelectItem("do odbioru","do odbioru"));
		lista.add(new SelectItem("odbior przez kuriera","odbior przez kuriera"));

		return lista;
	}

	/**
	 * Metoda edytuje w bazie danych zamówienie
	 */
	public void editData() {
		dao.updateData(editedData);
	}

	/**
	 * Metoda dodaje do bazy danych nowe zamówienie
	 */
	public void deleteData() {
		dao.deleteData(editedData);
		refreshData();
	}

	/**
	 * Metoda pobiera z bazy danych listę zamówień
	 */
	public void refreshData() {
		dataList = dao.getOrderList();
	}

	/**
	 * @return the dataList
	 */
	public ArrayList<OrderData> getDataList() {
		return dataList;
	}

	/**
	 * @param dataList
	 *            the dataList to set
	 */
	public void setDataList(ArrayList<OrderData> dataList) {
		this.dataList = dataList;
	}

	/**
	 * @return the editedData
	 */
	public OrderData getEditedData() {
		return editedData;
	}

	/**
	 * @param editedData
	 *            the editedData to set
	 */
	public void setEditedData(OrderData editedData) {
		this.editedData = editedData;
	}

	/**
	 * @return the newData
	 */
	public OrderData getNewData() {
		return newData;
	}

	/**
	 * @param newData
	 *            the newData to set
	 */
	public void setNewData(OrderData newData) {
		this.newData = newData;
	}

	/**
	 * @return the calendar
	 */
	public CalendarManager getCalendar() {
		return calendar;
	}

	/**
	 * @param calendar
	 *            the calendar to set
	 */
	public void setCalendar(CalendarManager calendar) {
		this.calendar = calendar;
	}

	/**
	 * @return the idPaczkiList
	 */
	public ArrayList<SelectItem> getIdPaczkiList() {
		return idPaczkiList;
	}

	/**
	 * @param idPaczkiList
	 *            the idPaczkiList to set
	 */
	public void setIdPaczkiList(ArrayList<SelectItem> idPaczkiList) {
		this.idPaczkiList = idPaczkiList;
	}

	/**
	 * @return the idKurieraList
	 */
	public ArrayList<SelectItem> getIdKurieraList() {
		return idKurieraList;
	}

	/**
	 * @param idKurieraList
	 *            the idKurieraList to set
	 */
	public void setIdKurieraList(ArrayList<SelectItem> idKurieraList) {
		this.idKurieraList = idKurieraList;
	}

	/**
	 * @return the pozycjaList
	 */
	public ArrayList<SelectItem> getPozycjaList() {
		return pozycjaList;
	}

	/**
	 * @param pozycjaList
	 *            the pozycjaList to set
	 */
	public void setPozycjaList(ArrayList<SelectItem> pozycjaList) {
		this.pozycjaList = pozycjaList;
	}

	/**
	 * @param statusList
	 *            the statusList to set
	 */
	public void setStatusList(ArrayList<SelectItem> statusList) {
		this.statusList = statusList;
	}

	/**
	 * @return the statusList
	 */
	public ArrayList<SelectItem> getStatusList() {
		return statusList;
	}

}
